package cn.map.treemap;

import java.util.*;
import java.util.stream.Collectors;

public class Demo03 {
    public static void main(String[] args) {
        /* 需求：
        字符串“aababcabcdabcde”
        请统计字符串中每一个字符出现的次数，并按照以下格式输出
        输出结果：
        a（5）b（4）c（3）d（2）e（1）

            新的统计思想：利用map集合进行统计

          如果题目中没有要求对结果进行排序，默认使用HashMap
          如果题目中要求对结果进行排序，请使用TreeMap

          键：表示要统计的内容
          值：表示次数

        */

        String str = "aababbbcabcdabcde";
        Map<Character,Integer> map = new TreeMap<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (map.containsKey(c)){
                map.put(c,map.get(c)+1);
            }else{
                map.put(c,1);
            }
        }
        Map<Character, Integer> map2 = sortByValue(map);
        System.out.println();
        map2.forEach((k,v)-> System.out.print(k+"("+v+")\t"));
    }


    public static Map<Character, Integer> sortByValue(Map<Character,Integer> map) {
        List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list,(o1,o2)->o2.getValue().compareTo(o1.getValue()));
        // 把list转成map
        // 排序
        Map<Character, Integer> collect = list.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (o1, o2) -> o1, LinkedHashMap::new));
        // 不排序
        // Map<Character, Integer> collect = list.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (o1, o2) -> o1));
        return collect;
    }
}
